﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using SGT_ON;
using DevExpress.Web.ASPxGridView;

public partial class PresupuestoPlantilla : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {

        if (Request.IsAuthenticated && !string.IsNullOrEmpty(Request.QueryString["ReturnUrl"]))
            Response.Redirect("~/AccesoNoAutorizado.aspx");
        }
    }
    protected void btnInsertarItem_Click(object sender, EventArgs e)
    {

    }
    protected void dsElementoNuevo_Inserting(object sender, ObjectDataSourceMethodEventArgs e)
    {
        // Asigno el ID del presupuesto. Tiene que ser 0 para que sea de la plantilla.
        ONElemento _elemento = (ONElemento)e.InputParameters[0];
        _elemento.IdPresupuesto = 0;        
    }
    protected void dsElementoNuevo_Inserted(object sender, ObjectDataSourceStatusEventArgs e)
    {
        Response.Redirect("PresupuestoPlantilla.aspx");
    }
    #region Metodos para almacenar los cambios
    protected void GuardarPresupuesto()
    {    
        //envio el 0
        AlmacenarDetalleDePresupuesto(0);        
    }
    /// <summary>
    /// almacena los cambios encontrados en las grillas (3). Utiliza el ID del presupuseto para actualizar en caso de que se de alta.
    /// </summary>
    private void AlmacenarDetalleDePresupuesto(int pIdPresupuesto)
    {
        //Actualizo los datos de la columna 1 
        ONElementoColeccion _elementosDeGrilla1 = ObtenerElementosDeGrilla(Columna1);
        ONElementoColeccion _elementosDeGrilla2 = ObtenerElementosDeGrilla(Columna2);
        ONElementoColeccion _elementosDeGrilla3 = ObtenerElementosDeGrilla(Columna3);
        ONElementoColeccion _elementosDeGrilla4 = ObtenerElementosDeGrilla(Columna4);

        ActualizarElementosModificados(_elementosDeGrilla1, Columna1, pIdPresupuesto);
        ActualizarElementosModificados(_elementosDeGrilla2, Columna2, pIdPresupuesto);
        ActualizarElementosModificados(_elementosDeGrilla3, Columna3, pIdPresupuesto);
        ActualizarElementosModificados(_elementosDeGrilla4, Columna4, pIdPresupuesto);
    }
    protected ONElementoColeccion ObtenerElementosDeGrilla(ASPxGridView pGrilla)
    {
        ONElementoColeccion _elementosDeGrilla = new ONElementoColeccion();
        ONElemento _elemento;

        int start = pGrilla.PageIndex * pGrilla.SettingsPager.PageSize;
        int end = pGrilla.VisibleRowCount;
        GridViewDataColumn _Item = pGrilla.Columns["Item"] as GridViewDataColumn;
        GridViewDataColumn _Orden = pGrilla.Columns["Orden"] as GridViewDataColumn;
        //GridViewDataColumn _Pintar = pGrilla.Columns["P"] as GridViewDataColumn;
        //GridViewDataColumn _Item = pGrilla.Columns["Item"] as GridViewDataColumn;
        //GridViewDataColumn _PanoCantidad = pGrilla.Columns["Paños"] as GridViewDataColumn;
        //GridViewDataColumn _ReacondicionarCantidad = pGrilla.Columns["Reac."] as GridViewDataColumn;
        //GridViewDataColumn _RepuestoCantidad = pGrilla.Columns["Repuesto"] as GridViewDataColumn;

        for (int i = start; i < end; i++)
        {
            ////////////////////////////////////////////////////////
            //Valores en la grilla            
            TextBox txtItem = (TextBox)pGrilla.FindRowCellTemplateControl(i, _Item, "txtItem");
            DropDownList ddlOrden = (DropDownList)pGrilla.FindRowCellTemplateControl(i, _Orden, "OrdenDdl");
            
            //esto es para evitar los encabezados de grupos.
            if (txtItem == null || ddlOrden == null)
                continue;

            int id = Convert.ToInt32(pGrilla.GetRowValues(i, pGrilla.KeyFieldName));

            _elemento = new ONElemento();
            _elemento.Item = txtItem.Text;
            _elemento.Orden = int.Parse(ddlOrden.SelectedValue);
            _elemento.ID = id;
            _elementosDeGrilla.Add(_elemento);
            //Fin obtener valores de la grilla
            //////////////////////////////////////////////////////////////
        }
        return _elementosDeGrilla;
    }
    protected void ActualizarElementosModificados(ONElementoColeccion pElementosDeGrilla, ASPxGridView pGrilla, int pIdPresupuesto)
    {
        int start = pGrilla.PageIndex * pGrilla.SettingsPager.PageSize;
        ONElemento _elementoDS;
        ONElementoColeccion _elementosAActualizar = new ONElementoColeccion();
        
        pGrilla.ClearSort();
        int end = pGrilla.VisibleRowCount;

        for (int i = start; i < end; i++)
        {
            _elementoDS = (ONElemento)pGrilla.GetRow(i);
            foreach (ONElemento _ele in pElementosDeGrilla)
                if (_elementoDS.ID == _ele.ID)
                {

                    // signiica que el elemento existia y ha sido modificado.
                        if ((_elementoDS.Item != _ele.Item)
                            || (_elementoDS.Orden != _ele.Orden))
                        { //el objeto ha cambiado, lo actualizo    
                            _elementoDS.Item = _ele.Item;
                            _elementoDS.Orden = _ele.Orden;
                            _elementoDS.Actualizar();
                        }
                }

        }
    }
    
    ///// <summary>
    ///// Devuelve todos los elementos de las tres grillas juntos.
    ///// </summary>
    ///// <returns></returns>
    //protected ONElementoColeccion ObtenerElementosDeTodasLasGrillas()
    //{
    //    //Obtengo elementos de Grilla 1
    //    ONElementoColeccion _resultado = ObtenerElementosDeGrilla(Columna1);

    //    //Obtengo elementos de Grilla 2
    //    ONElementoColeccion _aux = ObtenerElementosDeGrilla(Columna2);
    //    foreach (ONElemento _elemento in _aux)
    //        _resultado.Add(_elemento);

    //    //Obtengo elementos de Grilla 3
    //    _aux = ObtenerElementosDeGrilla(Columna3);
    //    foreach (ONElemento _elemento in _aux)
    //        _resultado.Add(_elemento);

    //    //Obtengo elementos de Grilla 4
    //    _aux = ObtenerElementosDeGrilla(Columna4);
    //    foreach (ONElemento _elemento in _aux)
    //        _resultado.Add(_elemento);

    //    return _resultado;
    //}
        
    
    #endregion
    protected void btnGuardar_Click(object sender, EventArgs e)
    {
        GuardarPresupuesto();
        Response.Redirect("PresupuestoPlantilla.aspx");
    }
}
